

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/Mine.jpg">
  <link rel="icon" href="/img/Mine.jpg">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="author" content="Chiam">
  <meta name="keywords" content="算法，安全">
  
    <meta name="description" content="『数据库』怎样设计一个数据库数据库从入门到精通：戳我 数据库设计概念 数据库设计是指对于一个给定的应用环境，构造（设计）优化的数据库逻辑模式和物理结构， 并据此建立数据库及其应用系统，使之能够有效地存储和管理数据，满足各种用户的应用需求，包括信息管理要求和数据操作要求。 目标：为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。  一、数据库设计的特点数据库建设的基本规律三分技术，七分管理">
<meta property="og:type" content="article">
<meta property="og:title" content="『数据库』怎样设计一个数据库">
<meta property="og:url" content="http://example.com/2023/12/06/%E3%80%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E3%80%8F%E6%80%8E%E6%A0%B7%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%BA%93/index.html">
<meta property="og:site_name" content="Chiam 的个人主页">
<meta property="og:description" content="『数据库』怎样设计一个数据库数据库从入门到精通：戳我 数据库设计概念 数据库设计是指对于一个给定的应用环境，构造（设计）优化的数据库逻辑模式和物理结构， 并据此建立数据库及其应用系统，使之能够有效地存储和管理数据，满足各种用户的应用需求，包括信息管理要求和数据操作要求。 目标：为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。  一、数据库设计的特点数据库建设的基本规律三分技术，七分管理">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610002544110.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610005837417.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610005932756.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610010013676.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610010217240.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610010355903.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610103753897.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610103859907.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610104046839.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610113602609.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="og:image" content="https://img-blog.csdnimg.cn/20200610130621818.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
<meta property="article:published_time" content="2023-12-05T16:11:43.861Z">
<meta property="article:modified_time" content="2023-12-05T16:18:10.730Z">
<meta property="article:author" content="Chiam">
<meta property="article:tag" content="算法，安全">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://img-blog.csdnimg.cn/20200610002544110.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70">
  
  
  
  <title>『数据库』怎样设计一个数据库 - Chiam 的个人主页</title>

  <link  rel="stylesheet" href="https://lib.baomitu.com/twitter-bootstrap/4.6.1/css/bootstrap.min.css" />



  <link  rel="stylesheet" href="https://lib.baomitu.com/github-markdown-css/4.0.0/github-markdown.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/hint.css/2.7.0/hint.min.css" />

  <link  rel="stylesheet" href="https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.css" />



<!-- 主题依赖的图标库，不要自行修改 -->
<!-- Do not modify the link that theme dependent icons -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_hj8rtnfg7um.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">


<link  rel="stylesheet" href="/css/main.css" />


  <link id="highlight-css" rel="stylesheet" href="/css/highlight.css" />
  
    <link id="highlight-css-dark" rel="stylesheet" href="/css/highlight-dark.css" />
  



  
<link rel="stylesheet" href="/css/custom.css">



  <script id="fluid-configs">
    var Fluid = window.Fluid || {};
    Fluid.ctx = Object.assign({}, Fluid.ctx)
    var CONFIG = {"hostname":"example.com","root":"/","version":"1.9.5-a","typing":{"enable":true,"typeSpeed":70,"cursorChar":"_","loop":false,"scope":[]},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"left","visible":"hover","icon":"❡"},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"code_language":{"enable":true,"default":"TEXT"},"copy_btn":true,"image_caption":{"enable":true},"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"placement":"right","headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":2},"lazyload":{"enable":true,"loading_img":"/img/loading.gif","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"follow_dnt":true,"baidu":null,"google":{"measurement_id":null},"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml","include_content_in_search":true};

    if (CONFIG.web_analytics.follow_dnt) {
      var dntVal = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack;
      Fluid.ctx.dnt = dntVal && (dntVal.startsWith('1') || dntVal.startsWith('yes') || dntVal.startsWith('on'));
    }
  </script>
  <script  src="/js/utils.js" ></script>
  <script  src="/js/color-schema.js" ></script>
  


  
<meta name="generator" content="Hexo 6.3.0"></head>


<body>
  

  <header>
    

<div class="header-inner" style="height: 70vh;">
  <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand" href="/">
      <strong>Chiam&#39;s Blogs</strong>
    </a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/">
                
                <span>首页</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/">
                
                <span>归档</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/">
                
                <span>分类</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/about/">
                
                <span>关于</span>
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/links/">
                
                <span>友链</span>
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
              <i class="iconfont icon-search"></i>
            </a>
          </li>
          
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">
              <i class="iconfont icon-dark" id="color-toggle-icon"></i>
            </a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

  

<div id="banner" class="banner" parallax=true
     style="background: url('/img/default.png') no-repeat center center; background-size: cover;">
  <div class="full-bg-img">
    <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
      <div class="banner-text text-center fade-in-up">
        <div class="h2">
          
            <span id="subtitle" data-typed-text="『数据库』怎样设计一个数据库"></span>
          
        </div>

        
          
  <div class="mt-3">
    
    
      <span class="post-meta">
        <i class="iconfont icon-date-fill" aria-hidden="true"></i>
        <time datetime="2023-12-06 00:11" pubdate>
          2023年12月6日 凌晨
        </time>
      </span>
    
  </div>

  <div class="mt-1">
    
      <span class="post-meta mr-2">
        <i class="iconfont icon-chart"></i>
        
          9.6k 字
        
      </span>
    

    
      <span class="post-meta mr-2">
        <i class="iconfont icon-clock-fill"></i>
        
        
        
          81 分钟
        
      </span>
    

    
    
  </div>


        
      </div>

      
    </div>
  </div>
</div>

</div>

  </header>

  <main>
    
      

<div class="container-fluid nopadding-x">
  <div class="row nomargin-x">
    <div class="side-col d-none d-lg-block col-lg-2">
      

    </div>

    <div class="col-lg-8 nopadding-x-md">
      <div class="container nopadding-x-md" id="board-ctn">
        <div id="board">
          <article class="post-content mx-auto">
            <h1 id="seo-header">『数据库』怎样设计一个数据库</h1>
            
            
              <div class="markdown-body">
                
                <h1 id="『数据库』怎样设计一个数据库"><a href="#『数据库』怎样设计一个数据库" class="headerlink" title="『数据库』怎样设计一个数据库"></a>『数据库』怎样设计一个数据库</h1><p>数据库从入门到精通：<a target="_blank" rel="noopener" href="https://blog.csdn.net/weixin_43627118/article/details/105027257">戳我</a></p>
<h2 id="数据库设计概念"><a href="#数据库设计概念" class="headerlink" title="数据库设计概念"></a>数据库设计概念</h2><ul>
<li>数据库设计是指对于一个给定的应用环境，构造（设计）优化的数据库逻辑模式和物理结构， 并据此建立数据库及其应用系统，使之能够有效地存储和管理数据，满足各种用户的应用需求，包括信息管理要求和数据操作要求。</li>
<li>目标：为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。</li>
</ul>
<p><strong>一、数据库设计的特点</strong><br>数据库建设的基本规律<br>三分技术，七分管理，十二分基础数据<br>管理</p>
<ul>
<li>数据库建设项目管理</li>
<li>企业（即应用部门）的业务管理</li>
</ul>
<p>基础数据</p>
<ul>
<li>收集、入库</li>
<li>更新新的数据</li>
</ul>
<p>结构（数据）设计和行为（处理）设计相结合。将数据库结构设计和数据处理设计密切结合</p>
<p><strong>二、数据库设计方法</strong></p>
<ul>
<li>手工与经验相结合方法<br>设计质量与设计人员的经验和水平有直接关系<br>数据库运行一段时间后常常不同程度地发现各种问 题，增加了维护代价</li>
<li>规范设计法<br>基本思想：过程迭代和逐步求精</li>
<li>新奥尔良（New Orleans）方法<br>将数据库设计分为若干阶段和步骤</li>
<li>基于 E-R 模型的数据库设计方法<br>概念设计阶段广泛采用</li>
<li>3NF（第三范式）的设计方法<br>逻辑阶段可采用的有效方法</li>
<li>CASE 即 Computer Aided Software Engineering， 中文意思是计算机辅助软件工程。CASE 是一组 工具和方法的集合，可以辅助软件开发生命周期 各阶段进行软件开发。<br>ORACLE Designer<br>SYBASE PowerDesigner</li>
</ul>
<p><strong>三、数据库设计的基本步骤</strong><br>（一）数据库设计的准备工作：选定参加设计的人 1.系统分析人员、数据库设计人员（核心人员）<br>自始至终参与数据库设计，其水平决定了数据库系统的质量</p>
<ul>
<li>用户和数据库管理员<br>主要参加需求分析和数据库的运行维护 3.应用开发人员（程序员和操作员）<br>在系统实施阶段参与进来，负责编制程序和准备软硬件环境<br>（二）数据库设计的过程 1.需求分析阶段</li>
<li>准确了解与分析用户需求（包括数据与处理）</li>
<li>最困难、最耗费时间的一步 2.概念结构设计阶段</li>
<li>整个数据库设计的关键</li>
<li>通过对用户需求进行综合、归纳与抽象，形 成一个独立于具体 DBMS 的概念模型</li>
</ul>
<p>需求分析和概念设计独立于任何数据库管理系统</p>
<p>3.逻辑结构设计阶段</p>
<ul>
<li>将概念结构转换为某个 DBMS 所支持的数据模型</li>
<li>对其进行优化</li>
</ul>
<p>4.数据库物理设计阶段</p>
<ul>
<li>为逻辑数据模型选取一个最适合应用环境的物理结构（包括存储结构和存取方法）</li>
</ul>
<p>逻辑设计和物理设计与选用的 DBMS 密切相关 5.数据库实施阶段<br>运用 DBMS 提供的数据库语言（如 SQL）及 宿主语言，根据逻辑设计和物理设计的结果</p>
<ul>
<li>建立数据库</li>
<li>编制与调试应用程序</li>
<li>组织数据入库</li>
<li>进行试运行</li>
</ul>
<p>6.数据库运行和维护阶段</p>
<ul>
<li>数据库应用系统经过试运行后即可投入正式运行</li>
<li>在数据库系统运行过程中必须不断地对其进行评价、调整与修改</li>
</ul>
<p>设计特点</p>
<ul>
<li>把数据库设计和对数据库中数据处理的设计紧密结合起来</li>
<li>将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行，相互参照，相互补充，以完善两方面的设计</li>
</ul>
<p>数据库设计过程中的各级模式的形成过程</p>
<ul>
<li>需求分析阶段<br>综合各个用户的应用需求</li>
<li>概念设计阶段<br>形成独立于机器特点，独立于各个 DBMS 产品的概念模式(E-R 图)</li>
<li>逻辑设计阶段<br>首先将 E-R 图转换成具体的数据库产品支 持的数据模型，如关系模型，形成数据库 逻辑模式<br>然后根据用户处理的要求、安全性的考虑， 在基本表的基础上再建立必要的视图 (View)，形成数据的外模式</li>
<li>物理设计阶段<br>根据 DBMS 特点和处理的需要，进行物理 存储安排，建立索引，形成数据库内模式</li>
</ul>
<h2 id="需求分析"><a href="#需求分析" class="headerlink" title="需求分析"></a>需求分析</h2><p>一、需求分析的任务</p>
<ul>
<li>详细调查现实世界要处理的对象（组织、部门、企业等）</li>
<li>充分了解原系统（手工系统或计算机系统）</li>
<li>明确用户的各种需求</li>
<li>确定新系统的功能</li>
<li>充分考虑今后可能的扩充和改变(不能仅仅按当前应用 需求来设计数据库)</li>
</ul>
<p>调查的重点是“数据”和“处理”，获得用户对数据库要求。</p>
<p>需求分析的重点：</p>
<ul>
<li>信息要求<br>用户需要从数据库中获得信息的内容与性质<br>由用户的信息要求可以导出数据要求，即在数据 库中需要存储哪些数据</li>
<li>处理要求<br>对处理功能的要求<br>对处理的响应时间的要求<br>对处理方式的要求(批处理 &#x2F; 联机处理)</li>
<li>新系统的功能必须能够满足用户的信息要求、处理 要求、安全性与完整性要求</li>
</ul>
<p>需求分析难点：</p>
<ul>
<li>确定用户最终需求<br>用户缺少计算机知识<br>设计人员缺少用户的专业知识</li>
<li>解决方法<br>设计人员必须不断深入地与用户进行交流</li>
</ul>
<p><strong>二、需求分析的方法</strong></p>
<p><strong>1. 调查与初步分析用户需求</strong><br>⑴ 调查组织机构情况</p>
<ul>
<li>组织部门的组成情况</li>
<li>各部门的职责等</li>
</ul>
<p>⑵ 调查各部门的业务活动情况。调查重点之一。</p>
<ul>
<li>各个部门输入和使用什么数据</li>
<li>如何加工处理这些数据</li>
<li>输出什么信息</li>
<li>输出到什么部门</li>
<li>输出结果的格式是什么<br>⑶ 在熟悉业务活动的基础上，协助用户明确对新系统 的各种要求。调查重点之二。</li>
<li>信息要求</li>
<li>处理要求</li>
<li>完全性与完整性要求<br>⑷ 对前面调查的结果进行初步分析<br>确定新系统的边界</li>
<li>确定哪些功能由计算机完成或将来准备让计算机完成</li>
<li>确定哪些活动由人工完成 由计算机完成的功能就是新系统应该实现的功能。</li>
</ul>
<p><strong>2.常用调查方法</strong><br>⑴ 跟班作业</p>
<ul>
<li>通过亲身参加业务工作了解业务活动的情况</li>
<li>能比较准确地理解用户的需求，但比较耗时</li>
</ul>
<p>⑵ 开调查会</p>
<ul>
<li>通过与用户座谈来了解业务活动情况及用户需求</li>
</ul>
<p>⑶ 请专人介绍</p>
<p>⑷ 询问</p>
<ul>
<li>对某些调查中的问题，可以找专人询问</li>
</ul>
<p>⑸ 设计调查表请用户填写</p>
<ul>
<li>如果调查表设计合理，则很有效，且易于为用户接受</li>
</ul>
<p>⑹ 查阅记录</p>
<ul>
<li>查阅与原系统有关的数据记录</li>
</ul>
<p>3.进一步分析和表达用户需求<br>结构化分析方法（Structured Analysis，简 称 SA 方法）</p>
<ul>
<li>从最上层的系统组织机构入手</li>
<li>自顶向下、逐层分解分析系统</li>
<li>数据流图和数据字典描述系统</li>
</ul>
<p>1）首先把任何一个系统都抽象为：<br><img src="https://img-blog.csdnimg.cn/20200610002544110.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"><br>2．分解处理功能和数据<br>(1)分解处理功能<br>将处理功能的具体内容分解为若干子功能<br>(2)分解数据<br>处理功能逐步分解同时，逐级分解所用数据， 形成若干层次的数据流图<br>(3)表达方法<br>处理逻辑：用判定表或判定树来描述<br>数据：用数据字典来描述 3.将分析结果再次提交给用户，征得用户的认可</p>
<p><strong>三、数据字典</strong><br>数据字典的用途是各类数据描述的集合<br>进行详细的数据收集和数据分析所获得的主要结果<br>数据字典的内容<br><strong>1.数据项</strong><br>数据项是不可再分的数据单位<br>对数据项的描述</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">数据项描述＝<br>｛数据项名，数据项含义说明，别名，<br>数据类型，长度，取值范围，取值含义，<br>与其他数据项的逻辑关系，<br>数据项之间的联系 ｝<br></code></pre></td></tr></table></figure>

<p><strong>2.数据结构</strong><br>数据结构反映了数据之间的组合关系。<br>一个数据结构可以由若干个数据项组成，也可以由若 干个数据结构组成，或由若干个数据项和数据结构混 合组成。<br>对数据结构的描述</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">数据结构描述＝<br>｛数据结构名，含义说明，<br>组成:｛数据项或数据结构｝｝<br></code></pre></td></tr></table></figure>

<p>3.数据流</p>
<ul>
<li>数据流是数据结构在系统内传输的路径。</li>
<li>对数据流的描述</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">数据流描述＝<br>｛ 数据流名，说明，数据流来源，<br>数据流去向，组成:｛数据结构｝，<br>平均流量，高峰期流量｝<br></code></pre></td></tr></table></figure>

<p><strong>4.数据存储</strong></p>
<ul>
<li>数据存储是数据结构停留或保存的地方，也是数 据流的来源和去向之一。</li>
<li>对数据存储的描述</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">数据存储描述＝<br>｛数据存储名，说明，编号，<br>输入的数据流 ，输出的数据流 ，<br>组成:｛数据结构｝，数据量，<br>存取频度， 存取方式｝<br></code></pre></td></tr></table></figure>

<p>5.处理过程</p>
<ul>
<li>具体处理逻辑一般用判定表或判定树来描述</li>
<li>处理过程说明性信息的描述</li>
</ul>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">处理过程描述＝<br>｛处理过程名，说明，输入:｛数据流｝，<br> 输出:｛数据流｝，处理:｛简要说明｝｝<br></code></pre></td></tr></table></figure>

<p>数据字典</p>
<ul>
<li>数据字典是关于数据库中数据的描述，是元数据， 而不是数据本身</li>
<li>数据字典在需求分析阶段建立，在数据库设计过程 中不断修改、充实、完善</li>
</ul>
<h2 id="概念结构设计"><a href="#概念结构设计" class="headerlink" title="概念结构设计"></a>概念结构设计</h2><p><strong>一、概念结构</strong></p>
<ul>
<li>将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计</li>
<li>概念结构是各种数据模型的共同基础，它比数据模型更独立于机器、更抽象，从而更加稳定</li>
<li>概念结构设计是整个数据库设计的关键</li>
<li>描述概念模型的工具：&#x3D;&#x3D;E-R 模型&#x3D;&#x3D;<br><strong>二、概念结构设计的方法与步骤</strong><br>设计概念结构的四类方法</li>
<li>自顶向下<br>首先定义全局概念结构的框架，然后逐步细化<br><img src="https://img-blog.csdnimg.cn/20200610005837417.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></li>
<li>自底向上<br>首先定义各局部应用的概念结构，然后将它们集成 起来，得到全局概念结构<br><img src="https://img-blog.csdnimg.cn/20200610005932756.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></li>
<li>逐步扩张<br>首先定义最重要的核心概念结构，然后向外扩充，以滚雪球的方式逐步生成其他概念结构，直至总体概念结构<br><img src="https://img-blog.csdnimg.cn/20200610010013676.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></li>
<li>混合策略<br>将自顶向下和自底向上相结合，用自顶 向下策略设计一个全局概念结构的框架， 以它为骨架集成由自底向上策略中设计的各局部概念结构。<br>自顶向下地进行需求分析<br>自底向上地设计概念结构<br><img src="https://img-blog.csdnimg.cn/20200610010217240.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"><br>自底向上设计概念结构的步骤<br>第 1 步：抽象数据并设计局部视图<br>第 2 步：集成局部视图，得到全局概念结构<br><img src="https://img-blog.csdnimg.cn/20200610010355903.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"><br><strong>三、数据抽象与局部视图设计</strong><br><strong>1.数据抽象</strong><br>抽象是对实际的人、物、事和概念中抽取 所关心的共同特性，忽略非本质的细节， 并把这些特性用各种概念精确地加以描述。<br>概念结构是对现实世界的一种抽象<br>三种常用抽象：</li>
<li>分类（Classification）<br>定义某一类概念作为现实世界中一组对象的类型<br>抽象了对象值和型之间的“is member of”的语义</li>
<li>聚集（Aggregation）<br>定义某一类型的组成成分<br>抽象了对象内部类型和成分之间“is part of”的语义<br>复杂的聚集，某一类型的成分仍是一个聚集</li>
<li>概括（Generalization）<br>定义类型之间的一种子集联系<br>抽象了类型之间的“is subset of”的语义<br>继承性</li>
</ul>
<p><strong>2.局部视图设计</strong><br>设计分 E-R 图的步骤:<br>1）选择局部应用</p>
<ul>
<li>在多层的数据流图中选择一个适当层次的数据流图，作为设计分 E-R 图的出发点</li>
<li>通常以&#x3D;&#x3D;中层数据流图&#x3D;&#x3D;作为设计分 E-R 图的依据</li>
<li>2）逐一设计分 E-R 图</li>
<li>将各局部应用涉及的数据分别从数据字典中 抽取出来<br>参照数据流图，标定各局部应用中的实体、 实体的属性、标识实体的码</li>
<li>确定实体之间的联系及其类型（1:1，1:n， m:n）<br><strong>两条准则：</strong></li>
<li>属性不能再具有需要描述的性质。即 属性必须是不可分的数据项，不能再由另一 些属性组成</li>
<li>属性不能与其他实体具有联系。联系 只发生在实体之间</li>
</ul>
<p><strong>四、视图的集成</strong><br>各个局部视图即分 E-R 图建立好后，还需要对它们进行合并，集成为一个整体的数据概念结构即总 E-R 图。</p>
<ul>
<li>多个分 E-R 图一次集成<br>一次集成多个分 E-R 图<br>通常用于局部视图比较简单时<br><img src="https://img-blog.csdnimg.cn/20200610103753897.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></li>
<li>逐步集成<br>用累加的方式一次集成两个分 E-R 图（通常是比较关键的两个局 部视图）<br><img src="https://img-blog.csdnimg.cn/20200610103859907.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"></li>
</ul>
<p>集成局部 E-R 图的步骤 ：合并；修改与重构<br><img src="https://img-blog.csdnimg.cn/20200610104046839.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="视图的集成"></p>
<ul>
<li>各分 E-R 图存在冲突<br>各个分 E-R 图之间必定会存在许多不一致的地方</li>
<li>合并分 E-R 图的主要工作与关键<br>合理消除各分 E-R 图的冲突</li>
</ul>
<p><strong>冲突</strong><br><strong>1.属性冲突</strong></p>
<ul>
<li>属性域冲突<br>属性值的类型<br>取值范围<br>取值集合不同</li>
<li>属性取值单位冲突</li>
</ul>
<p><strong>2.命名冲突</strong></p>
<ul>
<li>同名异义：不同意义的对象在不同的局部应用中 具有相同的名字</li>
<li>异名同义（一义多名）：同一意义的对象在不同 的局部应用中具有不同的名字</li>
</ul>
<p><strong>3.结构冲突</strong></p>
<ul>
<li>同一对象在不同应用中具有不同的抽象</li>
<li>同一实体在不同局部视图中所包含的属性不 完全相同，或者属性的排列次序不完全相同。<br>产生原因：不同的局部应用关心的是该实 体的不同侧面。<br>解决方法：使该实体的属性取各分 E-R 图 中属性的并集，再适当设计属性的次序。</li>
<li>实体之间的联系在不同局部视图中呈现不同的类型<br>解决方法：根据应用语义对实体联系的类型 进行综合或调整。</li>
</ul>
<p><strong>消除不必要的冗余，设计基本 E-R 图</strong><br><strong>1.冗余</strong></p>
<ul>
<li>冗余的数据是指可由基本数据导出的数据；<br>冗余的联系是指可由其他联系导出的联系</li>
<li>冗余数据和冗余联系容易破坏数据库的完整性，给 数据库维护增加困难</li>
<li>并不是所有的冗余数据与冗余联系都必须加以消除， 有时为了提高某些应用的效率，不得不以冗余信息作为代价。</li>
<li>设计数据库概念结构时，哪些冗余信息必须消除，哪些冗余信息允许存在，需要根据用户的整体需求来确定。</li>
<li>消除不必要的冗余后的初步 E-R 图称为基本 E- R 图。</li>
</ul>
<p><strong>2.消除冗余的方法</strong></p>
<ul>
<li>分析方法<br>以数据字典和数据流图为依据<br>根据数据字典中关于数据项之间的逻辑关系 的说明来消除冗余。<br>如果是为了提高效率，人为地保留了一些冗 余数据，则应把数据字典中数据关联的说明 作为完整性约束条件。<br>一种更好的方法是把冗余数据定义在视图中</li>
<li>规范化理论<br>函数依赖的概念提供了消除冗余联系的形式 化工具</li>
</ul>
<p>方法：</p>
<ol>
<li>确定分 E-R 图实体之间的数据依赖 ，并用实体码之间的函数依赖表示。</li>
<li>求 FL 的最小覆盖 GL ，差集为 D &#x3D; FL-GL。逐一考察 D 中的函数依赖，确定是否是冗余的联系，若 是，就把它去掉<br>(1) 冗余的联系一定在 D 中，而 D 中的联系不一定是冗余的；<br>(2) 当实体之间存在多种联系时要将实体之间的联系在形式上加以区分。</li>
</ol>
<p>验证整体概念结构：<br>视图集成后形成一个整体的数据库概念结构，对该 整体概念结构还必须进行进一步验证，确保它能够 满足下列条件：</p>
<ul>
<li>整体概念结构内部必须具有一致性，不存在互相矛盾的表达</li>
<li>整体概念结构能准确地反映原来的每个视图结构，包括属性、实体及实体间的联系</li>
<li>整体概念结构能满足需求分析阶段所确定的所有要求</li>
<li>整体概念结构最终还应该提交给用户，征求用户和有关人员的意见，进行评审、修改和优化，然后把它确定下来，作为数据库的概念结构，作为进一步设计数据库的依据</li>
</ul>
<h2 id="逻辑结构设计"><a href="#逻辑结构设计" class="headerlink" title="逻辑结构设计"></a>逻辑结构设计</h2><p>逻辑结构设计的任务</p>
<ul>
<li>把概念结构设计阶段设计好的基本 E-R 图转换为与选 用 DBMS 产品所支持的数据模型相符合的逻辑结构</li>
</ul>
<p>逻辑结构设计的步骤</p>
<ul>
<li>将概念结构转化为一般的关系、网状、层次模型</li>
<li>将转换来的关系、网状、层次模型向特定 DBMS 支持 下的数据模型转换</li>
<li>对数据模型进行优化</li>
</ul>
<p>逻辑结构设计时的 3 个步骤<br><img src="https://img-blog.csdnimg.cn/20200610113602609.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"><br><strong>一、E-R 图向关系模型的转换</strong><br><strong>1.转换内容</strong></p>
<ul>
<li>E-R 图向关系模型的转换要解决的问题<br>如何将实体型和实体间的联系转换为关系模式<br>如何确定这些关系模式的属性和码</li>
<li>转换内容<br>将 E-R 图转换为关系模型：将实体、实体的属性和 实体之间的联系转换为关系模式。</li>
<li>实体型间的联系有以下不同情况 ：<br>(1)一个 1:1 联系可以转换为一个独立的关系模式， 也可以与任意一端对应的关系模式合并。<br>转换为一个独立的关系模式；<br>与某一端实体对应的关系模式合并。<br>(2)一个 1:n 联系可以转换为一个独立的关系模式， 也可以与 n 端对应的关系模式合并。<br>转换为一个独立的关系模式；<br>与 n 端对应的关系模式合并。<br>(3) 一个 m:n 联系转换为一个关系模式。<br>(4)三个或三个以上实体间的一个多元联系转换为一个关系模式。<br>(5)具有相同码的关系模式可合并<br>目的：减少系统中的关系个数<br>合并方法：将其中一个关系模式的全部属性加入到另一个关系模式中，然后去掉其中的同义属性（可能同名也可能 不同名），并适当调整属性的次序</li>
</ul>
<p>注意：</p>
<ul>
<li>从理论上讲，1:1 联系可以与任意一端对应的关系模式合并</li>
<li>但在一些情况下，与不同的关系模式合并效率会大不 一样。因此究竟应该与哪端的关系模式合并需要依应 用的具体情况而定。</li>
<li>由于连接操作是最费时的操作，所以一般应以尽量减少连接操作为目标。</li>
</ul>
<p><strong>二、数据模型的优化</strong></p>
<ul>
<li>得到初步数据模型后，还应该适当地修改、调 整数据模型的结构，以进一步提高数据库应用 系统的性能，这就是&#x3D;&#x3D;数据模型的优化&#x3D;&#x3D;</li>
<li>关系数据模型的优化通常以&#x3D;&#x3D;规范化理论&#x3D;&#x3D;为指导</li>
</ul>
<p><strong>1.优化模型方法</strong></p>
<ul>
<li><strong>确定数据依赖</strong><br>按需求分析阶段所得到的语义，分别写出每个关系模式内 部各属性之间的数据依赖以及不同关系模式属性之间数据 依赖</li>
<li><strong>消除冗余的联系</strong><br>对于各个关系模式之间的数据依赖进行极小化处理，消除 冗余的联系。</li>
<li><strong>确定所属范式</strong><br>按照数据依赖的理论对关系模式逐一进行分析<br>考查是否存在部分函数依赖、传递函数依赖、多值依赖等<br>确定各关系模式分别属于第几范式</li>
<li>按照需求分析阶段得到的各种应用对数据处理的要求，分析对于这样的应用环境这些模式是否合适，确定是否要对它们进行合并或分解。<br>&#x3D;&#x3D;并不是规范化程度越高的关系就越优，一般说来，第三范式就足够了&#x3D;&#x3D;</li>
<li>按照需求分析阶段得到的各种应用对数据处理的要求， 对关系模式进行必要的分解，以提高数据操作的效率和存储空间的利用率。常用分解方法：<br><strong>水平分解</strong>：把(基本)关系的元组分为若干子集合，定义每个子集合为一个子关系，以提高系统的效率。<br>适用范围：满足“80&#x2F;20 原则”的应用；并发事务经常存取不相交的数据<br><strong>垂直分解</strong>：把关系模式 R 的属性分解为若干子集合，形成若干子关系模式。<br>使用范围：取决于分解后 R 上的所有事务的总效率是否得到了提高</li>
</ul>
<p><strong>三、设计用户子模式</strong><br>注重的问题<br>(1) 使用更符合用户习惯的别名<br>(2) 针对不同级别的用户定义不同的 View，以满足系统对安全性的要求。<br>(3) 简化用户对系统的使用</p>
<h2 id="数据库的物理设计"><a href="#数据库的物理设计" class="headerlink" title="数据库的物理设计"></a>数据库的物理设计</h2><p><strong>数据库的物理设计</strong></p>
<ul>
<li>数据库在物理设备上的存储结构与存取方法称为数据 库的物理结构，它依赖于选定的数据库管理系统</li>
<li>为一个给定的逻辑数据模型选取一个最适合应用环境 的物理结构的过程，就是数据库的物理设计</li>
</ul>
<p><strong>数据库物理设计的步骤</strong></p>
<ul>
<li>确定数据库的物理结构，在关系数据库中主要指存取方法 和存储结构</li>
<li>对物理结构进行评价，评价的重点是时间和空间效率<br>如果评价结果满足原设计要求，则可进入到物理实施阶段， 否则，就需要重新设计或修改物理结构，有时甚至要返回 逻辑设计阶段修改数据模型<br><img src="https://img-blog.csdnimg.cn/20200610130621818.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzQ2MDIyNA==,size_16,color_FFFFFF,t_70" srcset="/img/loading.gif" lazyload alt="在这里插入图片描述"><br><strong>一、数据库物理设计的内容和方法</strong><br>设计物理数据库结构的准备工作</li>
<li>对要运行的事务进行详细分析，获得选择物理数据库设计所需参数</li>
<li>充分了解所用 RDBMS 的内部特征，特别是系统提 的存取方法和存储结构</li>
</ul>
<p>选择物理数据库设计所需参数</p>
<ul>
<li>数据库查询事务<br>查询的关系<br>查询条件所涉及的属性<br>连接条件所涉及的属性<br>查询的投影属性</li>
<li>数据更新事务<br>被更新的关系<br>每个关系上的更新操作条件所涉及的属性<br>修改操作要改变的属性值</li>
<li>每个事务在各关系上运行的频率和性能要求</li>
</ul>
<p>关系数据库物理设计的内容</p>
<ul>
<li>为关系模式选择存取方法(建立存取路径)</li>
<li>设计关系、索引等数据库文件的物理存储结构</li>
</ul>
<p><strong>1.关系模式存取方法选择</strong></p>
<ul>
<li>数据库系统是多用户共享的系统，对同一个关系要建立&#x3D;&#x3D;多条存取路径&#x3D;&#x3D;才能满足多用户的多种应用要求</li>
<li>物理设计的任务之一就是要确定选择哪些存取方法，即&#x3D;&#x3D;建立哪些存取路径&#x3D;&#x3D;</li>
</ul>
<p>DBMS 常用存取方法</p>
<ul>
<li>索引方法<br>目前主要是 B+树索引方法<br>经典存取方法，使用最普遍</li>
<li>聚簇（Cluster）方法</li>
<li>HASH 方法</li>
</ul>
<p>根据应用要求确定</p>
<ul>
<li>对哪些属性列建立&#x3D;&#x3D;索引&#x3D;&#x3D;</li>
<li>对哪些属性列建立&#x3D;&#x3D;组合索引&#x3D;&#x3D;</li>
<li>对哪些索引要设计为&#x3D;&#x3D;唯一索引&#x3D;&#x3D;</li>
</ul>
<p>选择索引存取方法的一般规则</p>
<ul>
<li>如果一个(或一组)属性经常在查询条件中出现，则考虑在 这个(或这组)属性上建立索引(或组合索引)</li>
<li>如果一个属性经常作为最大值和最小值等聚集函数的参 数，则考虑在这个属性上建立索引</li>
<li>如果一个(或一组)属性经常在连接操作的连接条件中出现， 则考虑在这个(或这组)属性上建立索引</li>
</ul>
<p>关系上定义的索引数过多会带来较多的额外开销</p>
<ul>
<li>维护索引的开销</li>
<li>查找索引的开销</li>
</ul>
<p><strong>2.聚簇存取方法的选择</strong><br><strong>聚簇</strong><br>为了提高某个属性（或属性组）的查询速度，把这个或这些属性（称为聚簇码）上具有&#x3D;&#x3D;相同值&#x3D;&#x3D;的元组集中存放在&#x3D;&#x3D;连续的物理块&#x3D;&#x3D;称为聚簇<br><strong>聚簇的用途</strong></p>
<ul>
<li>大大提高按聚簇码进行查询的效率</li>
<li>节省存储空间<br>聚簇以后，聚簇码相同的元组集中在一起了，因而 聚簇码值不必在每个元组中重复存储，只要在一组 中存一次就行了</li>
</ul>
<p><strong>聚簇的局限性</strong></p>
<ul>
<li>聚簇只能提高某些特定应用的性能</li>
<li>建立与维护聚簇的开销相当大<br>对已有关系建立聚簇，将导致关系中元组移动其物理存储位置，并使此关系上原有的索引无效，必须重建<br>当一个元组的聚簇码改变时，该元组的存储位置也要做相应移动</li>
</ul>
<p><strong>聚簇的适用范围</strong></p>
<ul>
<li>既适用于单个关系独立聚簇，也适用于多个关系组合聚簇。</li>
<li>当通过聚簇码进行访问或连接是该关系的主要应用， 与聚簇码无关的其他访问很少或者是次要的时候，可 以使用聚簇。</li>
</ul>
<p><strong>设计候选聚簇</strong></p>
<ul>
<li>对经常在一起进行连接操作的关系可以建立聚簇</li>
<li>如果一个关系的一组属性经常出现在相等比较条件中，则 该单个关系可建立聚簇</li>
<li>如果一个关系的一个(或一组)属性上的值重复率很高，则 此单个关系可建立聚簇。即对应每个聚簇码值的平均元组 数不太少。太少了，聚簇的效果不明显</li>
</ul>
<p>优化聚簇设计</p>
<ul>
<li>从聚簇中删除经常进行全表扫描的关系；</li>
<li>从聚簇中删除更新操作远多于连接操作的关系；</li>
<li>不同的聚簇中可能包含相同的关系，一个关系可以 在某一个聚簇中，但不能同时加入多个聚簇<br>从这多个聚簇方案(包括不建立聚簇)中选择一个较优的，即 在这个聚簇上运行各种事务的总代价最小</li>
</ul>
<p><strong>3.HASH 存取方法的选择</strong><br>选择 HASH 存取方法的规则<br>当一个关系满足下列两个条件时，可以选择 HASH 存 取方法</p>
<ul>
<li>该关系的属性主要出现在等值连接条件中或主要 出现在相等比较选择条件中</li>
<li>该关系的大小可预知，而且不变； 或该关系的大小动态改变，但所选用的 DBMS 提供了 动态 HASH 存取方法</li>
</ul>
<p><strong>三、确定数据库的存储结构</strong><br>确定数据库物理结构的内容<br><strong>1. 确定数据的存放位置和存储结构</strong></p>
<ul>
<li>关系</li>
<li>索引</li>
<li>聚簇</li>
<li>日志</li>
<li>备份</li>
</ul>
<p>确定数据存放位置和存储结构的因素</p>
<ul>
<li>存取时间</li>
<li>存储空间利用率</li>
<li>维护代价</li>
</ul>
<p>基本原则：<br>根据应用情况将</p>
<ul>
<li>易变部分与稳定部分分开存放</li>
<li>存取频率较高部分与存取频率较低部分，分开存放</li>
</ul>
<p><strong>2. 确定系统配置</strong><br>DBMS 产品一般都提供了一些存储分配参数</p>
<ul>
<li>同时使用数据库的用户数</li>
<li>同时打开的数据库对象数</li>
<li>内存分配参数</li>
<li>使用的缓冲区长度、个数</li>
<li>存储分配参数</li>
</ul>
<p><strong>四、评价物理结构</strong></p>
<ul>
<li>评价内容<br>对数据库物理设计过程中产生的多种方案进行细致的评价，从中选择一个较优的方案作为数据库的物理结构</li>
<li>评价方法（完全依赖于所选用的 DBMS ）<br>定量估算各种方案：存储空间；存取时间；维护代价<br>对估算结果进行权衡、比较，选择出一个较优的合 理的物理结构<br>如果该结构不符合用户需求，则需要修改设计</li>
</ul>
<h2 id="数据库的实施和维护"><a href="#数据库的实施和维护" class="headerlink" title="数据库的实施和维护"></a>数据库的实施和维护</h2><p><strong>一、数据的载入和应用程序的调试</strong><br><strong>数据的载入</strong></p>
<ul>
<li>数据库结构建立好后，就可以向数据库中装载数据了。 组织数据入库是数据库实施阶段最主要的工作。</li>
<li>数据装载方法<br>人工方法<br>计算机辅助数据入库</li>
</ul>
<p><strong>应用程序的编码和调试</strong></p>
<ul>
<li>数据库应用程序的设计应该与数据设计并行进行</li>
<li>在组织数据入库的同时还要调试应用程序</li>
</ul>
<p><strong>二、数据库的试运行</strong><br>在原有系统的数据有一小部分已输入数据库后，就可以开始 对数据库系统进行联合调试，称为数据库的试运行<br>数据库试运行主要工作包括：<br>1）功能测试</p>
<ul>
<li>实际运行数据库应用程序，执行对数据库的各种操作，测试应 用程序的功能是否满足设计要求</li>
<li>如果不满足，对应用程序部分则要修改、调整，直到达到设计 要求</li>
</ul>
<p>2）性能测试</p>
<ul>
<li>测量系统的性能指标，分析是否达到设计目标</li>
<li>如果测试的结果与设计目标不符，则要返回物理设计阶段，重 新调整物理结构，修改系统参数，某些情况下甚至要返回逻辑 设计阶段，修改逻辑结构</li>
</ul>
<p><strong>分期分批组织数据入库</strong></p>
<ul>
<li>重新设计物理结构甚至逻辑结构，会导致数据重 新入库。</li>
<li>由于数据入库工作量实在太大，费时、费力，所 以应分期分批地组织数据入库</li>
<li>先输入小批量数据供调试用<br>待试运行基本合格后再大批量输入数据<br>逐步增加数据量，逐步完成运行评价</li>
</ul>
<p><strong>数据库的转储和恢复</strong></p>
<ul>
<li>在数据库试运行阶段，系统还不稳定，硬、软件故障随时都可能发生</li>
<li>系统的操作人员对新系统还不熟悉，误操作也不可避免</li>
<li>因此必须做好数据库的转储和恢复工作，尽量减少对数据库的破坏。</li>
</ul>
<p><strong>三、数据库的运行和维护</strong></p>
<ul>
<li>数据库试运行合格后，数据库即可投入正式运行。</li>
<li>数据库投入运行标志着开发任务的基本完成和维护工 作的开始</li>
<li>对数据库设计进行评价、调整、修改等维护工作是一 个长期的任务，也是设计工作的继续和提高<br>应用环境在不断变化<br>数据库运行过程中物理存储会不断变化</li>
</ul>
<p>在数据库运行阶段，对数据库经常性的维护 工作主要是由 DBA 完成的，包括：<br>1 . 数据库的转储和恢复<br>2 . 数据库的安全性、完整性控制<br>3 . 数据库性能的监督、分析和改进<br>4 . 数据库的重组织和重构造</p>
<p><strong>重组织的形式：</strong></p>
<ul>
<li>全部重组织；</li>
<li>部分重组织——只对频繁增、删的表进行重组织。</li>
</ul>
<p><strong>重组织的目标：</strong></p>
<ul>
<li>提高系统性能</li>
</ul>
<p><strong>重组织的工作：</strong></p>
<ul>
<li>按原设计要求<br>– 重新安排存储位置<br>– 回收垃圾<br>– 减少指针链</li>
<li>数据库的重组织不会改变原设计的数据逻辑结构和物理结构</li>
</ul>
<p><strong>数据库重构造</strong>：<br>根据新环境调整数据库的模式和内模式</p>
<ul>
<li>增加新的数据项</li>
<li>改变数据项的类型</li>
<li>改变数据库的容量</li>
<li>增加或删除索引</li>
<li>修改完整性约束条件</li>
</ul>

                
              </div>
            
            <hr/>
            <div>
              <div class="post-metas my-3">
  
    <div class="post-meta mr-3 d-flex align-items-center">
      <i class="iconfont icon-category"></i>
      

<span class="category-chains">
  
  
    
      <span class="category-chain">
        
  <a href="/categories/%E6%95%B0%E6%8D%AE%E5%BA%93/" class="category-chain-item">数据库</a>
  
  

      </span>
    
  
</span>

    </div>
  
  
</div>


              
  

  <div class="license-box my-3">
    <div class="license-title">
      <div>『数据库』怎样设计一个数据库</div>
      <div>http://example.com/2023/12/06/『数据库』怎样设计一个数据库/</div>
    </div>
    <div class="license-meta">
      
        <div class="license-meta-item">
          <div>作者</div>
          <div>Chiam</div>
        </div>
      
      
        <div class="license-meta-item license-meta-date">
          <div>发布于</div>
          <div>2023年12月6日</div>
        </div>
      
      
      
        <div class="license-meta-item">
          <div>许可协议</div>
          <div>
            
              
              
                <a class="print-no-link" target="_blank" href="https://creativecommons.org/licenses/by/4.0/">
                  <span class="hint--top hint--rounded" aria-label="BY - 署名">
                    <i class="iconfont icon-by"></i>
                  </span>
                </a>
              
            
          </div>
        </div>
      
    </div>
    <div class="license-icon iconfont"></div>
  </div>



              
                <div class="post-prevnext my-3">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/2023/12/06/%E3%80%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E3%80%8F%E6%95%B0%E6%8D%AE%E5%BA%93SQL%E8%AF%AD%E8%A8%80%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A-Part%201-SQL%E8%AF%AD%E8%A8%80%E6%A6%82%E8%BF%B0/" title="『数据库』数据库SQL语言从入门到精通-Part 1-SQL语言概述">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">『数据库』数据库SQL语言从入门到精通-Part 1-SQL语言概述</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/2023/12/06/%E3%80%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E3%80%8F%E5%AD%A6%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%98%E4%B8%8D%E4%BC%9ASelect%EF%BC%8CSQL%20Select%E8%AF%A6%E8%A7%A3%EF%BC%8C%E5%8D%95%E8%A1%A8%E6%9F%A5%E8%AF%A2%E5%AE%8C%E5%85%A8%E8%A7%A3%E6%9E%90%EF%BC%9F/" title="『数据库』学数据库还不会Select，SQL Select详解，单表查询完全解析？">
                        <span class="hidden-mobile">『数据库』学数据库还不会Select，SQL Select详解，单表查询完全解析？</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
  
  
    <article id="comments" lazyload>
      
  <div id="valine"></div>
  <script type="text/javascript">
    Fluid.utils.loadComments('#valine', function() {
      Fluid.utils.createScript('https://lib.baomitu.com/valine/1.5.1/Valine.min.js', function() {
        var options = Object.assign(
          {"appId":"fIfc7WqUDZohlQuPc2lz5mJy-MdYXbMMI","appKey":"zjlAG3ZA3o4cBHVAkjzc2Z20","path":"window.location.pathname","placeholder":"留言仅限讨论，禁止广告等行为","avatar":"retro","meta":["nick","mail","link"],"requiredFields":[],"pageSize":10,"lang":"zh-CN","highlight":false,"recordIP":false,"serverURLs":"https://fifc7wqu.api.lncldglobal.com","emojiCDN":null,"emojiMaps":null,"enableQQ":false},
          {
            el: "#valine",
            path: window.location.pathname
          }
        )
        new Valine(options);
        Fluid.utils.waitElementVisible('#valine .vcontent', () => {
          var imgSelector = '#valine .vcontent img:not(.vemoji)';
          Fluid.plugins.imageCaption(imgSelector);
          Fluid.plugins.fancyBox(imgSelector);
        })
      });
    });
  </script>
  <noscript>Please enable JavaScript to view the comments</noscript>


    </article>
  


          </article>
        </div>
      </div>
    </div>

    <div class="side-col d-none d-lg-block col-lg-2">
      
  <aside class="sidebar" style="margin-left: -1rem">
    <div id="toc">
  <p class="toc-header">
    <i class="iconfont icon-list"></i>
    <span>目录</span>
  </p>
  <div class="toc-body" id="toc-body"></div>
</div>



  </aside>


    </div>
  </div>
</div>





  



  



  



  



  







    

    
      <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
        <i class="iconfont icon-arrowup" aria-hidden="true"></i>
      </a>
    

    
      <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v" for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>

    

    
  </main>

  <footer>
    <div class="footer-inner">
  
    <div class="footer-content">
       <meta name="referrer" content="no-referrer" /> <footer id="footer" role="contentinfo"> <div class="divider"> <div class="wall"></div> <img class="animals" src="/img/footer_animals_new.png" srcset="/img/loading.gif" lazyload alt="Footer Animals"> </div> <div class="container" data-index="450"> <p> <a href="https://chiamzhang.github.io" target="_blank">DogEgg</a> <i class="iconfont icon-love"></i> <a href="#" target="_blank">LittePig</a> </p> <p> Powered by  <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-pen"></i> Theme  <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a> </p> </div> </footer> 
    </div>
  
  
  
  
</div>

  </footer>

  <!-- Scripts -->
  
  <script  src="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.js" ></script>
  <link  rel="stylesheet" href="https://lib.baomitu.com/nprogress/0.2.0/nprogress.min.css" />

  <script>
    NProgress.configure({"showSpinner":false,"trickleSpeed":100})
    NProgress.start()
    window.addEventListener('load', function() {
      NProgress.done();
    })
  </script>


<script  src="https://lib.baomitu.com/jquery/3.6.4/jquery.min.js" ></script>
<script  src="https://lib.baomitu.com/twitter-bootstrap/4.6.1/js/bootstrap.min.js" ></script>
<script  src="/js/events.js" ></script>
<script  src="/js/plugins.js" ></script>


  <script  src="https://lib.baomitu.com/typed.js/2.0.12/typed.min.js" ></script>
  <script>
    (function (window, document) {
      var typing = Fluid.plugins.typing;
      var subtitle = document.getElementById('subtitle');
      if (!subtitle || !typing) {
        return;
      }
      var text = subtitle.getAttribute('data-typed-text');
      
        typing(text);
      
    })(window, document);
  </script>




  
    <script  src="/js/img-lazyload.js" ></script>
  




  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/tocbot/4.20.1/tocbot.min.js', function() {
    var toc = jQuery('#toc');
    if (toc.length === 0 || !window.tocbot) { return; }
    var boardCtn = jQuery('#board-ctn');
    var boardTop = boardCtn.offset().top;

    window.tocbot.init(Object.assign({
      tocSelector     : '#toc-body',
      contentSelector : '.markdown-body',
      linkClass       : 'tocbot-link',
      activeLinkClass : 'tocbot-active-link',
      listClass       : 'tocbot-list',
      isCollapsedClass: 'tocbot-is-collapsed',
      collapsibleClass: 'tocbot-is-collapsible',
      scrollSmooth    : true,
      includeTitleTags: true,
      headingsOffset  : -boardTop,
    }, CONFIG.toc));
    if (toc.find('.toc-list-item').length > 0) {
      toc.css('visibility', 'visible');
    }

    Fluid.events.registerRefreshCallback(function() {
      if ('tocbot' in window) {
        tocbot.refresh();
        var toc = jQuery('#toc');
        if (toc.length === 0 || !tocbot) {
          return;
        }
        if (toc.find('.toc-list-item').length > 0) {
          toc.css('visibility', 'visible');
        }
      }
    });
  });
</script>


  <script src=https://lib.baomitu.com/clipboard.js/2.0.11/clipboard.min.js></script>

  <script>Fluid.plugins.codeWidget();</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/anchor-js/4.3.1/anchor.min.js', function() {
    window.anchors.options = {
      placement: CONFIG.anchorjs.placement,
      visible  : CONFIG.anchorjs.visible
    };
    if (CONFIG.anchorjs.icon) {
      window.anchors.options.icon = CONFIG.anchorjs.icon;
    }
    var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
    var res = [];
    for (var item of el) {
      res.push('.markdown-body > ' + item.trim());
    }
    if (CONFIG.anchorjs.placement === 'left') {
      window.anchors.options.class = 'anchorjs-link-left';
    }
    window.anchors.add(res.join(', '));

    Fluid.events.registerRefreshCallback(function() {
      if ('anchors' in window) {
        anchors.removeAll();
        var el = (CONFIG.anchorjs.element || 'h1,h2,h3,h4,h5,h6').split(',');
        var res = [];
        for (var item of el) {
          res.push('.markdown-body > ' + item.trim());
        }
        if (CONFIG.anchorjs.placement === 'left') {
          anchors.options.class = 'anchorjs-link-left';
        }
        anchors.add(res.join(', '));
      }
    });
  });
</script>


  
<script>
  Fluid.utils.createScript('https://lib.baomitu.com/fancybox/3.5.7/jquery.fancybox.min.js', function() {
    Fluid.plugins.fancyBox();
  });
</script>


  <script>Fluid.plugins.imageCaption();</script>

  <script  src="/js/local-search.js" ></script>




  
<script src="/js/love.js"></script>
<script src="/js/funnyTitle.js"></script>
<script src="/js/backTop.js"></script>
<script src="//cdn.jsdelivr.net/gh/bynotes/texiao/source/js/xiaoxuehua.js"></script>



<!-- 主题的启动项，将它保持在最底部 -->
<!-- the boot of the theme, keep it at the bottom -->
<script  src="/js/boot.js" ></script>


  

  <noscript>
    <div class="noscript-warning">博客在允许 JavaScript 运行的环境下浏览效果更佳</div>
  </noscript>
<script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"pluginRootPath":"live2dw/","pluginJsPath":"lib/","pluginModelPath":"assets/","tagMode":false,"debug":false,"model":{"jsonPath":"/live2dw/assets/wanko.model.json"},"display":{"position":"left","width":150,"height":150,"hOffset":20,"vOffset":0},"mobile":{"show":false,"scale":0.5},"react":{"opacity":0.9},"log":false});</script></body>
</html>
